package com.zhihuishu.micro.course.dao;

import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.github.abel533.mapper.Mapper;
import com.zhihuishu.micro.course.model.CourseStatus;
import com.zhihuishu.micro.course.model.ScoreAssessRule;
import com.zhihuishu.micro.course.model.TblCourse;

public interface TblCourseMapper extends Mapper<TblCourse> {

    /**
     * 插入方法接收课程名称、创建人两个参数
     * 
     * @param tblCourse
     */
    void save(TblCourse tblCourse);

    TblCourse get(long courseId);

    void remove(@Param("courseId")
    long courseId, @Param("deleteUser")
    long deleteUser);

    void update(TblCourse course);

    /**
     * 根据CC_COURSE_ID获取课程ID
     * 
     * @param linkCourseId
     * @return
     */
    Long getCourseId(long linkCourseId);

    /**
     * 根据课程ID获取CC_COURSE_ID
     * 
     * @param courseId
     * @return
     */
    Long getLinkId(long courseId);

    /**
     * 根据课程ID查询MyuniCourseId
     * 
     * @param courseId
     * @return
     */
    Long getMyuniId(long courseId);

    /**
     * 查询课程审计内容
     * 
     * @param count
     * @return
     * @throws RemoteException
     */
    List<TblCourse> findCourseOpenDtos(int count);

    /**
     * 批量更新课程表的审计检索状态
     * 
     * @param courseIds
     * @return
     */
    int updateQueryState(Long courseId);

    /**
     * 查询待审核课程总数量
     * 
     * @author ztl
     * @param courseName
     * @return
     */
    Integer findPendingAuditCourseAmount(String courseName);

    /**
     * 查询待审核课程信息列表
     * 
     * @author ztl
     * @param courseName
     * @param pageNo
     * @param pageSize
     * @return
     */
    List<TblCourse> findPendingAuditCourseDtos(Map<String, Object> map);

    /**
     * 查询考核标准（在线成绩满分、见面课成绩满分、期末考试成绩满分、论坛成绩满分）
     * 
     * @author ztl
     * @param onlineCourseId
     * @return
     */
    ScoreAssessRule queryScoreAssessRule(long onlineCourseId);

    /**
     * 更新课程状态（state:null建设中。0:待审核，1：通过审核，2：不通过）
     * 
     * @param onlineCourseId
     * @param state
     * @param userId
     */
    void updateCourseState(@Param("courseId")
    long courseId, @Param("state")
    Integer state);

    /**
     * 查询总数
     * 
     * @author ylj
     * @param keywords
     * @param userId
     * @return
     * @throws RemoteException
     */
    Integer findCourseDtoTotalCount(@Param("keywords")
    String keywords, @Param("userId")
    Long userId);

    /**
     * 查询课程信息分页
     * 
     * @author ylj
     * @param keywords
     * @param pageNo
     * @param pageSize
     * @return
     * @throws RemoteException
     */
    List<TblCourse> findPageCourseDtos(@Param("keywords")
    String keywords, @Param("firstResult")
    int firstResult, @Param("pageSize")
    int pageSize, @Param("userId")
    Long userId);

    /**
     * 根据课程id查询课程信息
     * 
     * @author yulijin
     * @date 2016年7月19日 下午3:10:19
     * @param courseId
     * @return
     */
    TblCourse findCourseOpenByCourseId(Long courseId);

    /**
     * 根据课程ids批量查询课程信息
     * 
     * @author yulijin
     * @date 2016年8月12日 上午9:08:01
     * @param courseIds
     * @return
     */
    List<TblCourse> findCourseByCourseIds(@Param("courseIds")
    String courseIds);

    /**
     * 
     * @discription 根据课程id集合查询课程完成状态
     * @author jipeng
     * @created 2016年8月30日 下午4:45:52
     * @param courseIds
     * @return
     */
    List<CourseStatus> findCoursesStatus(@Param("courseIds")
    List<Long> courseIds);

    /**
     * 根据课程id查询其根课程下面所有的课程ids
     * 
     * @author yulijin
     * @date 2016年9月6日 上午8:45:52
     * @param courseIds
     * @return
     */
    List<Long> findCourseIdFamilysByCourseId(Long courseId);

    /**
     * 根据课程Id查询复制根课程id
     * 
     * @author yulijin
     * @date 2016年9月7日 上午9:34:24
     * @param courseId
     * @return
     */
    Long findRootCourseIdByCourseId(Long courseId);

    /**
     * 根据用户ID查询用户创建的课程列表
     * 
     * @param userId
     * @param type 课程类型
     * @return
     */
    List<TblCourse> userCourseList(@Param("userId")
    long userId, @Param("type")
    Integer type);

    /**
     * 根据课程id查询视频的数量（进阶）
     * 
     * @discription
     * @author jipeng
     * @created 2016年9月19日 下午3:40:22
     * @param courseId
     * @return
     */
    int queryVideoCount(@Param("courseId")
    long courseId);

    /**
     * 根据课程id查询视频数量（微课）
     * 
     * @author ztl
     * @date 2016年11月15日下午5:00:50
     * @param courseId
     * @return
     */
    int queryVideoCountForMincourse(@Param("courseId")
    long courseId);

    /**
     * 查询课程是新版建课还是老版建课 返回结果：等于0 为老版建课，否则为新版
     * 
     * @author ztl
     * @param courseId
     * @return
     */
    int findCourseStepStatCount(@Param("courseId")
    Long courseId);

    /**
     * 根据课程ID集合获取课程名、课程设计原则、课程设计原则更新时间、课程推广推荐词、课程推广片花ID、课程推广更新时间
     * 
     * @author ztl
     * @param courseId
     * @return
     */
    List<TblCourse> getCourseIntroductionAndMovieClipsInfo(@Param("courseIds")
    List<Long> courseIds);

    /**
     * 根据课程
     * @Description
     * @author shisong
     * @date 2017年2月9日 上午10:17:51
     * @modifyNote 
     * @param courseIds
     * @param type
     * @return
     */
	List<TblCourse> overseasCourseList(List<Long> courseIds, Integer type);
}
